#pragma once

#include <map>
#include <vector>
#include <string>
#include <fstream>
#include <iostream>
using namespace std;

class PT_Entry {
public:
    double P; // 压强 Pa
    double T; // 温度 K
    double rho_gas; // 气体密度 kg/m^3
    double rho_liq; // 液体密度 kg/m^3
    double visc_gas; // 气体粘度 Pa*s
    double visc_liq; // 液体粘度 Pa*s
    double heat_gas; // 气体比热容 J/(kg*K)
    double heat_liq; // 液体比热容 J/(kg*K)
    double ent_gas; // 气体焓 J/kg
    double ent_liq; // 液体焓 J/kg
    double rs;      // 平衡气体体积分数
};


class PT_Table {

public:
    // Pa -> index
    map<double, int> P_index_map;

    // K -> index
    map<double, int> T_index_map;

    // 二维表
    vector <vector<PT_Entry>> table;
    vector<vector<double>> table_ori;

    // 从文件中导入表
    bool import_table(string filename);
    void save_to_mat(string filename);

    // 从表中查找
    PT_Entry find(double P, double T);
};